package 代码随想录_动态规划.基础题目;

/**
 * @author zx
 * @create 2022-05-22 16:53
 * 1.确定dp数组（dp table）以及下标的含义
 *  dp[i]的定义：到达第i个台阶所花费的最少体力为dp[i]。
 * 2.确定递推公式
 *  选最小的，所以dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i];
 * 3.dp数组如何初始化
 *  只初始化dp[0]和dp[1]就够了，其他的最终都是dp[0]dp[1]推出。
 * 4.确定遍历顺序
 *
 * 5.举例推导dp数组
 */
public class 使用最小花费爬楼梯_746 {
    public int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length];
        dp[0] = cost[0];
        dp[1] = cost[1];
        for(int i = 2;i < cost.length;i++){
            dp[i] = Math.min(dp[i - 1],dp[i - 2]) + cost[i];
        }
        return Math.min(dp[cost.length - 1],dp[cost.length - 2]);
    }
}
